package org.wlldTest.lesson2;

import org.dromara.easyai.i.PsoFunction;
import org.dromara.easyai.tools.Frequency;

public class MyPosFunction extends Frequency implements PsoFunction {
    private int n;

    public MyPosFunction(int n) {
        this.n = n;
    }

    //设定两个限制条件 1，所有人的红包金额加起来等于100，
    // 2，每个人获得的金额与所有人金额的平均数的差，与随机设置的随机范围内一个标准值最小
    // getResult 是每次一个例子移动完毕，触发getResult,
    //参数 doubles 是该粒子 每个维度所处的位置 i是触发该方法的粒子id
    @Override
    public double getResult(double[] doubles, int i) throws Exception {
        if (Math.abs(sigma(doubles) - 100) < 0.01) {
            double avg = average(doubles);
            double sigma = 0;
            for (double t : doubles) {
                sigma = sigma + Math.abs(t - avg);
            }
            sigma = sigma / doubles.length;
            return Math.abs(sigma - n);
        }
        return 200;
    }
}
